/**
 * 用户相关API请求
 * 包含登录、注册等用户相关的接口调用
 */

// 后端API基础URL
const BASE_URL = 'http://localhost:8088/api';

/**
 * 用户登录
 * @param {Object} data - 登录参数
 * @param {String|Number} data.userAccount - 用户账号
 * @param {String|Number} data.userPassword - 用户密码
 * @returns {Promise} - 返回Promise对象，包含登录结果
 */
export const login = (data) => {
    return new Promise((resolve, reject) => {
        uni.request({
            url: `${BASE_URL}/login`,
            method: 'POST',
            data: {
                userAccount: data.userAccount,
                userPassword: data.userPassword
            },
            success: (res) => {
                if (res.data && res.data.success) {
<<<<<<< HEAD
                    // 登录成功
                    resolve(res.data);
                } else {
                    // 登录失败
=======
                    // 登录成功，保存完整的用户信息
                    const userInfo = {
                        ...res.data.data,
                        isLoggedIn: true  // 添加登录状态标记
                    };
                    uni.setStorageSync('userInfo', userInfo);
                    // 触发存储变化事件
                    uni.$emit('storage-changed');
                    resolve(res.data);
                } else {
>>>>>>> 73359ff (更新头像)
                    reject(res.data || { message: '登录失败' });
                }
            },
            fail: (err) => {
                reject(err || { message: '网络请求失败' });
            }
        });
    });
};

/**
 * 用户注册
 * @param {Object} data - 注册参数
 * @param {String|Number} data.useraccount - 用户账号
 * @param {String|Number} data.password - 用户密码
 * @param {Object} data.userInfo - 用户信息
 * @param {String} data.userInfo.name - 用户姓名
 * @param {String} data.userInfo.phone - 用户手机号
 * @param {String} data.userInfo.birthday - 用户生日
 * @param {String} data.userInfo.birthplace - 用户出生地
 * @param {String} data.userInfo.currentLocation - 用户现居地
 * @param {String} data.userInfo.role - 用户类型
 * @returns {Promise} - 返回Promise对象，包含注册结果
 */
export const register = (data) => {
    return new Promise((resolve, reject) => {
<<<<<<< HEAD
        uni.request({
            url: `${BASE_URL}/register`,
            method: 'POST',
            data: {
                userAccount: data.useraccount,
                userPassword: data.password,
                userName: data.userInfo.name,
                userSex: data.userInfo.gender || '未知', // 使用前端收集的性别信息
                phoneNumber: data.userInfo.phone,
                userBirthday: data.userInfo.birthday,
                userAge: calculateAge(data.userInfo.birthday),
                userBirthPlace: data.userInfo.birthplace || '',
                userLivePlace: data.userInfo.currentLocation || '',
                userType: mapRoleToUserType(data.userInfo.role)
            },
=======
        const formData = {
            userAccount: this.useraccount,
            userPassword: this.password,
            userName: this.userInfo.name,
            userSex: this.userInfo.gender,
            userBirthday: this.userInfo.birthday,
            userAge: this.calculatedAge,
            userType: this.userInfo.role,
            phoneNumber: this.userInfo.phone,
            userBirthPlace: this.userInfo.birthplace || '',
            userLivePlace: this.userInfo.currentLocation || '',
            userAvatar: this.userInfo.avatar ||'/static/avatar-default.png' // 确保使用正确的字段名
        };

        uni.uploadFile({
            url: `${BASE_URL}/register`,
            filePath: data.avatar,
            name: 'avatar',
            formData: formData,
>>>>>>> 73359ff (更新头像)
            success: (res) => {
                if (res.data && res.data.success) {
                    // 注册成功
                    resolve(res.data);
                } else {
                    // 注册失败
                    reject(res.data || { message: '注册失败' });
                }
            },
            fail: (err) => {
                reject(err || { message: '网络请求失败' });
            }
        });
    });
};

/**
 * 计算年龄
 * @param {String} birthday - 生日字符串 (YYYY-MM-DD)
 * @returns {Number} - 计算出的年龄
 */
function calculateAge(birthday) {
    const birthDate = new Date(birthday);
    const today = new Date();

    let age = today.getFullYear() - birthDate.getFullYear();
    const monthDiff = today.getMonth() - birthDate.getMonth();

    if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {
        age--;
    }

    return age;
}

/**
 * 将前端角色映射到后端用户类型
 * @param {String} role - 前端角色标识
 * @returns {String} - 后端用户类型
 */
function mapRoleToUserType(role) {
    const roleMap = {
        'patient': '患者',
        'family': '家属',
        'professional': '志愿者',
        'public': '社会公众'
    };

    return roleMap[role] || '其他';
}

/**
 * 更新用户信息
 * @param {Object} data - 用户信息参数
 * @param {String} data.userId - 用户ID
 * @param {String} data.userName - 用户姓名
 * @param {String} data.userSex - 用户性别
 * @param {String} data.userBirthday - 用户生日
 * @param {String} data.userAge - 用户年龄
 * @param {String} data.phoneNumber - 用户手机号
 * @param {String} data.userBirthPlace - 用户出生地
 * @param {String} data.userLivePlace - 用户现居地
<<<<<<< HEAD
=======
 * * @param {String} data.filePath - 本地文件路径
>>>>>>> 73359ff (更新头像)
 * @returns {Promise} - 返回Promise对象，包含更新结果
 */
export const updateUserInfo = (data) => {
    return new Promise((resolve, reject) => {
<<<<<<< HEAD
        uni.request({
            url: `${BASE_URL}/user/update`,
            method: 'POST',
            data: {
                userId: data.userId,
                userName: data.userName,
                userSex: data.userSex,
                userBirthday: data.userBirthday,
                userAge: data.userAge,
                phoneNumber: data.phoneNumber,
                userBirthPlace: data.userBirthPlace,
                userLivePlace: data.userLivePlace
            },
            success: (res) => {
                if (res.data && res.data.success) {
                    // 更新成功
                    resolve(res.data);
                } else {
                    // 更新失败
                    reject(res.data || { message: '更新用户信息失败' });
=======
        uni.uploadFile({
            url: `${BASE_URL}/user/update/avatar`,
            filePath: data.filePath,
            name: 'file',
            formData: {
                userId: data.userId
            },
            success: (uploadRes) => {
                try {
                    const result = JSON.parse(uploadRes.data);
                    if (result.success) {
                        // 头像上传成功后，更新本地存储中的用户信息
                        const userInfo = uni.getStorageSync('userInfo');
                        if (userInfo) {
                            // 更新头像URL
                            userInfo.userAvatar = result.data.avatarUrl;
                            // 保存更新后的用户信息
                            uni.setStorageSync('userInfo', userInfo);
                            // 触发存储变化事件
                            uni.$emit('storage-changed');
                        }
                        resolve(result);
                    } else {
                        reject(result || { message: '头像上传失败' });
                    }
                } catch (err) {
                    reject({ message: '服务器响应格式错误' });
>>>>>>> 73359ff (更新头像)
                }
            },
            fail: (err) => {
                reject(err || { message: '网络请求失败' });
<<<<<<< HEAD
=======
            },
            complete: () => {
                // 无论成功失败都隐藏loading
                uni.hideLoading();
            }
        });
    });
};

// ... 现有代码保持不变 ...

/**
 * 更新用户头像
 * @param {Object} data - 上传参数
 * @param {String} data.userId - 用户ID
 * @param {String} data.filePath - 本地文件路径
 * @returns {Promise} - 返回Promise对象，包含上传结果
 */
export const updateUserAvatar = (data) => {
    return new Promise((resolve, reject) => {
        // 直接使用uni.uploadFile上传文件
        uni.uploadFile({
            url: `${BASE_URL}/user/update/avatar`,
            filePath: data.filePath,
            name: 'file',
            formData: {
                userId: data.userId
            },
            success: (uploadRes) => {
                try {
                    const result = JSON.parse(uploadRes.data);
                    if (result.success) {
                        resolve(result);
                    } else {
                        reject(result || { message: '头像上传失败' });
                    }
                } catch (err) {
                    reject({ message: '服务器响应格式错误' });
                }
            },
            fail: (err) => {
                reject(err || { message: '网络请求失败' });
            },
            complete: () => {
                // 无论成功失败都隐藏loading
                uni.hideLoading();
>>>>>>> 73359ff (更新头像)
            }
        });
    });
};